<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class M_Medico extends Modelo {

    public $matricula = null;
    public $nombre;
    public $tipoDoc;
    public $numeroDoc;
    public $telefono;
    public $direccion;
    public $localidad;
    public $distrito;
    public $email;
    public $codPostal;

    function __construct() {
        parent::__construct();
        $this->tabla = 'medicos';
    }

    function setAttributes($datos = array(), $tipo = 'object') {
        return parent::_setAttributes(__CLASS__, $datos, $tipo);
    }

    function doArray() {
        return parent::_doArray(__CLASS__);
    }

    /**
     * Metodo para levantar un item de la base de datos por id
     * @param integer $id el id del objeto a levantar
     * @return boolean falso si hubo error, true si tuvo exito
     */
    public function get($matricula) {
        $results = $this->db->get_where($this->tabla, array('matricula' => $matricula));
        $data = $results->result_array();

        if (empty($data)) {
            return false;
        } else {
            $this->setAttributes($data[0], 'array');
        }
        return true;
    }

    /**
     * Devuelve valores por defecto en un arreglo.
     */
    function getValidacion($edit = false) { 
        if ($edit) {
            $valid = array(
                array('field' => 'nombre', 'label' => 'Nombre y Apellido', 'rules' => 'trim|required'),
                array('field' => 'tipoDoc', 'label' => 'Tipo de Doc', 'rules' => 'trim|required'),
                array('field' => 'numeroDoc', 'label' => 'Nro de Doc', 'rules' => 'trim|required|numeric'),
                array('field' => 'telefono', 'label' => 'Teléfono', 'rules' => 'trim'),
                array('field' => 'direccion', 'label' => 'Dirección', 'rules' => 'trim'),
                array('field' => 'localidad', 'label' => 'Localidad', 'rules' => 'trim'),
            );
        } else {
            $valid = array(
                array('field' => 'matricula', 'label' => 'Matricula', 'rules' => 'trim|required|is_unique[medicos.matricula]'),
                array('field' => 'nombre', 'label' => 'Nombre y Apellido', 'rules' => 'trim|required'),
                array('field' => 'tipoDoc', 'label' => 'Tipo de Doc', 'rules' => 'trim|required'),
                array('field' => 'numeroDoc', 'label' => 'Nro de Doc', 'rules' => 'trim|required|numeric'),
                array('field' => 'telefono', 'label' => 'Teléfono', 'rules' => 'trim'),
                array('field' => 'direccion', 'label' => 'Dirección', 'rules' => 'trim'),
                array('field' => 'localidad', 'label' => 'Localidad', 'rules' => 'trim'),
            );
        }
        return $valid;
    }

    /**
     * Devuelve valores por defecto en un arreglo.
     */
    function valoresPorDefecto() {
        return array(
            'matricula' => '',
            'nombre' => '',
            'tipoDoc' => '',
            'numeroDoc' => '',
            'telefono' => '',
            'direccion' => '',
            'localidad' => '',
            'distrito' => 9,
            'email' => '',
            'codPostal' => ''
        );
    }

    /**
     * Devuelve las causas por estudio 
     */
    function getListPorCausaId($causaId) {
        $this->db->select($this->tabla . '.*');
        $this->db->from($this->tabla);
        $this->db->join('causas_x_abogados_demandantes', 'causas_x_abogados_demandantes.abogadoDemandanteId = ' . $this->tabla . '.id');
        $this->db->where('causas_x_abogados_demandantes.causaId', $causaId);

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Guarda la instancia en la base de datos.
     * @return boolean true o false si tuvo exito o no.
     */
    public function save() {
        $this->db->insert($this->tabla, $this);
        return $this->matricula;
    }

    /**
     * Actualiza la instancia en la base de datos.
     * @return boolean true o false si tuvo exito o no.
     */
    public function update() {
        $this->db->update($this->tabla, $this, "matricula = $this->matricula");
        $ret = $this->db->affected_rows();
        return $ret;
    }

    /**
     * Actualiza la instancia en la base de datos.
     * @return boolean true o false si tuvo exito o no.
     */
    public function insertUpdate() {
        $this->db->query("
            INSERT INTO ssap_{$this->tabla}
                (
                    matricula, 
                    nombre, 
                    tipoDoc, 
                    numeroDoc, 
                    telefono, 
                    direccion, 
                    localidad, 
                    distrito,
                    email,
                    codPostal
                )
            VALUES
                (
                    '{$this->matricula}', 
                    '{$this->nombre}', 
                    '{$this->tipoDoc}', 
                    '{$this->numeroDoc}', 
                    '{$this->telefono}', 
                    '{$this->direccion}', 
                    '{$this->localidad}', 
                    '{$this->distrito}',
                    '{$this->email}',
                    '{$this->codPostal}'
                )
            ON DUPLICATE KEY UPDATE
                    nombre = '{$this->nombre}', 
                    tipoDoc = '{$this->tipoDoc}', 
                    numeroDoc = '{$this->numeroDoc}', 
                    telefono = '{$this->telefono}', 
                    direccion = '{$this->direccion}', 
                    localidad = '{$this->localidad}',
                    distrito = '{$this->distrito}',
                    email = '{$this->email}',
                    codPostal = '{$this->codPostal}'
                ");
        return 1;
    }

    /**
     * Borrado fisico de la instancia en la base de datos.
     * @return boolean true o false dependiendo si borro o no.
     */
    /*  public function delete() {
      if ($this->matricula == '')
      return false;

      $this->db->delete($this->tabla, array('matricula' => $this->matricula));
      return $this->db->affected_rows();
      } */
}